package com.blog.common.advice;

import com.blog.common.exception.BlogException;
import com.blog.pojo.response.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.method.annotation.HandlerMethodValidationException;

@Slf4j
@ResponseBody
@ControllerAdvice
public class ExceptionAdvice {

    @ExceptionHandler
    public Result exceptionHandler(Exception exception){
        log.error("发生异常,e: ",exception);
        return Result.fail(exception.getMessage());
    }

@ExceptionHandler
    // 处理BlogException异常
    public Result exceptionHandler(BlogException exception){
        // 记录异常信息
        log.error("发生异常,e: ",exception.getErrMsg());
        // 返回失败结果，包含异常信息
        return Result.fail(exception.getErrMsg());
    }


    //用于处理@Notnull在参数里的
// 处理HandlerMethodValidationException异常
    @ExceptionHandler
    public Result exceptionHandler(HandlerMethodValidationException exception){
        // 记录异常信息
        log.error("发生异常,e: {}",exception.getMessage());
        // 返回参数校验失败的结果
        return Result.fail("参数校验失败");
    }


    
    //用于处理参数在类里的校验
    @ExceptionHandler
    public Result exceptionHandler(MethodArgumentNotValidException exception){
        String msg=exception.getBindingResult().getFieldError().getDefaultMessage();
        // 记录异常信息
        log.error("发生异常,e: {}",msg);
        // 返回参数校验失败的结果
        return Result.fail(msg);
    }


}
